package com.oop.neibulei;

//局部内部类：定义在一个方法或者一个作用域里面的类

public class Tes_neibulei_1 {
    public static void main(String[] args) {
        Outer01 outer01 = new Outer01();
        outer01.m1();
//      7)外部其他类---不能访问--->局部内部类（因为局部内部类地位是一个局部变量）
//      Inner02 inner02 = new Inner02(); 不可以在外面创建内部类的对象！！！！
    }

}

class Outer01 { //外部类
    private int n1 = 100;

    private void m2() {
    }//私有方法

    public void m1() {//方法
/*
        1）可以直接访问外部类的所有成员，包含私有的
        3）作用域:仅仅在定义它的方法或代码块中。
        4）局部内部类---访问---->外部类的成员 访问方式:直接访问!
*/
        final class Inner02 {
//      2）不能添加访问修饰符因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final 修饰，因为局部变量也可以使用final
            private int n1 = 800;
            public void f1() {
//      5）外部类---访问---->局部内部类的成员 访问方式:创建对象，再访问(注意:必须在作用域内) 比如下面的n1 m2
//      8）如果外部类和局部内部类的成员重名时，默认遵循就近原则，如果想访问外部类的成员，使用【外部类.this.成员】去访问  eg：n1输出800，而不是上面的100
                System.out.println("n1=" + n1);
                System.out.println("外部类的n1=" + Outer01.this.n1); //Outer01.this本质就是外部类的对象，即Outer01.this=outer01

                m2();
            }
        }
//      6）外部类在方法中，可以创建Inner02对象，然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }
}
